// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "Character/LyraCharacter.h"

#include "LyraCharacterWithAbilities.generated.h"

#define UE_API LYRAGAME_API

class UAbilitySystemComponent;
class ULyraAbilitySystemComponent;
class UObject;

// ALyraCharacter通常从拥有的玩家状态获取能力系统组件
// 这表示一个具有自包含能力系统组件的角色。
UCLASS(MinimalAPI, Blueprintable)
class ALyraCharacterWithAbilities : public ALyraCharacter
{
	GENERATED_BODY()

public:
	/**
	 * 构造函数
	 */
	UE_API ALyraCharacterWithAbilities(const FObjectInitializer& ObjectInitializer);

	/**
	 * 后初始化组件
	 */
	UE_API virtual void PostInitializeComponents() override;

	/**
	 * 获取能力系统组件
	 */
	UE_API virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;

private:

	// 玩家角色使用的能力系统组件子对象。
	UPROPERTY(VisibleAnywhere, Category = "Lyra|PlayerState")
	TObjectPtr<ULyraAbilitySystemComponent> AbilitySystemComponent; // 能力系统组件
	
	// 此Actor使用的健康属性集。
	UPROPERTY()
	TObjectPtr<const class ULyraHealthSet> HealthSet; // 健康集
	// 此Actor使用的战斗属性集。
	UPROPERTY()
	TObjectPtr<const class ULyraCombatSet> CombatSet; // 战斗集
};

#undef UE_API